package com.jn.singleton.type4;

/**
 * @author 江南大学1033190417
 * @date 2022/4/10 15:59
 */
public class SingletonTest3 {
    public static void main(String[] args) {
        //线程不安全
        Singleton instance =Singleton.getInstance();
        Singleton instance1 =Singleton.getInstance();
        System.out.println(instance1==instance);//true
        System.out.println(instance.hashCode());
        System.out.println(instance1.hashCode());//相同
    }
}

class Singleton{

    private static Singleton instance;

    private Singleton(){}

    //提供一个静态方法，当使用到该方法时，才去创建instance
    //即懒汉式
    //线程安全问题
    /*
       当多个线程同时调用getInstance()时，如果几个线程同时做判断就会创建多个实例对象
       解决：添加synchronized字段
     */
    /*
       新问题：
       效率低
     */
    public static synchronized Singleton getInstance(){
        if (instance==null){
            instance=new Singleton();
        }
        return instance;
    }

}
